define('apps/common/UserData', ['core/jQuery', 'core/ajax/Ajax'], function(require) {

    var $ = require('core/jQuery'),
        Ajax = require('core/ajax/Ajax'),
        fgroupURL = '/friend/ajax/group_list.php',
        albumURL = '/item/ajax/album_list.php';

    var UserData = {
        // 基本信息
        'uid' : K.Env.UID,
        'viewname' : K.Env.viewname,

        // 用户配置
        'fgroup' : [],  // 用户所有分组
        'album' : [],   // 用户所有专辑

        // 其他
        'friends' : {}, // 好友相关信息（缓存及联动用）
        'goods' : {}    // 宝贝相关信息（缓存及联动用）
    };

    // 创建事件
    K.CustEvent.createEvents(UserData, 'fgroupchange, albumchange');

    /**
     * 用户分组：查 增 删
     */
    UserData.getFGroup = function(callback) {
        callback = K.isFunction(callback) ? callback : function() {};
        if(!K.isEmpty(this.fgroup)) {
            callback(this.fgroup);
        } else {
            Ajax.get(fgroupURL,
                $.proxy(function(data) {
                    this.fgroup = data.fgroup;
                    callback(this.fgroup);
                }, this),
                function(error) {
                    K.log('Data Err:', error);
                }
            );
        }
    };
    UserData.addFGroup = function(fgroup) {
        fgroup = [].concat(fgroup);
        this.fgroup.push(fgroup);
        K.fire('fgroupchange', {data:this.fgroup});

    };
    UserData.delFGroup = function(fgroupID) {
        K.forEach(this.fgroup, function(item, index, thisFGroup) {
            if(item.gid === fgroupID) {
                thisFGroup.splice(index, 1);
            }
        });
        K.fire('fgroupchange', {data:this.fgroup});
    }

    /**
     * 用户专辑：查 增 删
     */
    UserData.getAlbum = function(callback) {
        callback = K.isFunction(callback) ? callback : function() {};
        if(!K.isEmpty(this.album)) {
            callback(this.album);
        } else {
            Ajax.get(albumURL,
                $.proxy(function(data) {
                    this.album = data.albumlist;
                    callback(this.album);
                }, this),
                function(error) {
                    K.log('Data Err:', error);
                }
            );
        }
    };
    UserData.addAlbum = function(album) {
        album = [].concat(album);
        this.album.push(album);
        K.fire('albumchange', {data:this.album});
    };
    UserData.delAlbum = function(albumID) {
        K.forEach(this.album, function(item, index, thisAlbum) {
            if(item.aid === albumID) {
                thisAlbum.splice(index, 1);
            }
        });
        K.fire('albumchange', {data:this.album});
    }

    return UserData;

});
